#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
#include <bluetooth/l2cap.h>
#include <unistd.h>

#define BUFFER_SIZE 1024

void receive_upgrade_package(int socket) {
    char buffer[BUFFER_SIZE];
    int bytes_read;

    // 接收数据
    while ((bytes_read = read(socket, buffer, sizeof(buffer))) > 0) {
        // 处理接收到的数据
        printf("Received %d bytes\n", bytes_read);
        // 这里可以将数据写入文件或进行其他处理
    }

    if (bytes_read < 0) {
        perror("Error reading from socket");
    }
}

int main() {
    // 初始化蓝牙套接字
    int sock = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);
    if (sock < 0) {
        perror("Failed to create socket");
        return 1;
    }

    // 绑定到蓝牙地址
    struct sockaddr_l2 addr = {0};
    addr.l2_family = AF_BLUETOOTH;
    addr.l2_psm = htobs(0x1001); // PSM (Protocol/Service Multiplexer)

    // 绑定套接字
    if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
        perror("Failed to bind socket");
        close(sock);
        return 1;
    }

    // 监听连接
    listen(sock, 1);
    printf("Waiting for connections...\n");

    // 接受连接
    struct sockaddr_l2 client;
    socklen_t client_len = sizeof(client);
    int client_sock = accept(sock, (struct sockaddr *)&client, &client_len);
    if (client_sock < 0) {
        perror("Failed to accept connection");
        close(sock);
        return 1;
    }

    printf("Connection accepted\n");

    // 接收升级包
    receive_upgrade_package(client_sock);

    // 关闭套接字
    close(client_sock);
    close(sock);
    return 0;
}

/*

1. 嵌入式设备端：
创建蓝牙套接字并绑定到指定的 PSM。
监听连接并接受来自手机的连接。
接收数据并进行处理。
2. 手机端：
获取蓝牙适配器并连接到嵌入式设备。
发送升级包数据。
*/